package collections;

import java.util.*;
import java.util.Map.Entry;

class Map_HashMapTest {
    /**
     * 
     * @Title: main  
     * @Description: map的遍历可以从两种角度去：keySet和entrySet
     *                             方式分两种：增强for和迭代器
     *                             综合来看，有4种遍历方式。
     *               只遍历key使用keySet角度，只遍历value是用values方法
     *               如果遍历key + value： 当key较为简单时使用keySet
     *                                    当key较为复杂时使用entrySet
     *                                    (原因：HashMap查找value的性能消耗比一次性取出key+value要大很多)
     *               Map一般只用HashMap，它的遍历速度怎么遍历都快与TreeMap，但是如果有特殊要求那就用TreeMap。
     *
     * @param args
     */
    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("one", "苹果");
        hashMap.put("two", "微软");
        hashMap.put("three", "谷歌");
        
        //keySet角度
        System.out.println("#################keySet: 增强for");
        for (String key : hashMap.keySet()) {
            String value = hashMap.get(key);
            System.out.println(key + ": " +value);
        }
        System.out.println("#################keySet: 迭代器");
        Iterator<String> iterator = hashMap.keySet().iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            String value = hashMap.get(key);
            System.out.println(key + ": " +value);
        }
        //entrySet角度: 注意一个Entry： 一个key value对
        System.out.println("#################entrySet: 增强for");
        for (Entry<String, String> entry : hashMap.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + ": " +value);
        }
        System.out.println("#################entrySet: 迭代器");
        Iterator<Entry<String, String>> iteratorEntry = hashMap.entrySet().iterator();
        while (iteratorEntry.hasNext()) {
            Entry<String, String> entry = iteratorEntry.next();
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + ": " +value);
        }
        System.out.println("###########只遍历Value：");
        for (String value : hashMap.values()) {
            System.out.println(value);
        }
    }
}